define('ace/mode/ini_highlight_rules', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
  'use strict'

  var oop = require('../lib/oop')
  var TextHighlightRules = require('./text_highlight_rules').TextHighlightRules

  var escapeRe = '\\\\(?:[\\\\0abtrn;#=:]|x[a-fA-F\\d]{4})'

  var IniHighlightRules = function() {
    this.$rules = {
      start: [{
        token: 'punctuation.definition.comment.ini',
        regex: '#.*',
        push_: [{
          token: 'comment.line.number-sign.ini',
          regex: '$|^',
          next: 'pop'
        }, {
          defaultToken: 'comment.line.number-sign.ini'
        }]
      }, {
        token: 'punctuation.definition.comment.ini',
        regex: ';.*',
        push_: [{
          token: 'comment.line.semicolon.ini',
          regex: '$|^',
          next: 'pop'
        }, {
          defaultToken: 'comment.line.semicolon.ini'
        }]
      }, {
        token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'],
        regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)'
      }, {
        token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'],
        regex: '^(\\[)(.*?)(\\])'
      }, {
        token: 'punctuation.definition.string.begin.ini',
        regex: "'",
        push: [{
          token: 'punctuation.definition.string.end.ini',
          regex: "'",
          next: 'pop'
        }, {
          token: 'constant.language.escape',
          regex: escapeRe
        }, {
          defaultToken: 'string.quoted.single.ini'
        }]
      }, {
        token: 'punctuation.definition.string.begin.ini',
        regex: '"',
        push: [{
          token: 'constant.language.escape',
          regex: escapeRe
        }, {
          token: 'punctuation.definition.string.end.ini',
          regex: '"',
          next: 'pop'
        }, {
          defaultToken: 'string.quoted.double.ini'
        }]
      }]
    }

    this.normalizeRules()
  }

  IniHighlightRules.metaData = {
    fileTypes: ['ini', 'conf'],
    keyEquivalent: '^~I',
    name: 'Ini',
    scopeName: 'source.ini'
  }

  oop.inherits(IniHighlightRules, TextHighlightRules)

  exports.IniHighlightRules = IniHighlightRules
})

define('ace/mode/folding/ini', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
  'use strict'

  var oop = require('../../lib/oop')
  var Range = require('../../range').Range
  var BaseFoldMode = require('./fold_mode').FoldMode

  var FoldMode = exports.FoldMode = function() {
  }
  oop.inherits(FoldMode, BaseFoldMode);

  (function() {
    this.foldingStartMarker = /^\s*\[([^\])]*)]\s*(?:$|[;#])/

    this.getFoldWidgetRange = function(session, foldStyle, row) {
      var re = this.foldingStartMarker
      var line = session.getLine(row)

      var m = line.match(re)

      if (!m) return

      var startName = m[1] + '.'

      var startColumn = line.length
      var maxRow = session.getLength()
      var startRow = row
      var endRow = row

      while (++row < maxRow) {
        line = session.getLine(row)
        if (/^\s*$/.test(line)) { continue }
        m = line.match(re)
        if (m && m[1].lastIndexOf(startName, 0) !== 0) { break }

        endRow = row
      }

      if (endRow > startRow) {
        var endColumn = session.getLine(endRow).length
        return new Range(startRow, startColumn, endRow, endColumn)
      }
    }
  }).call(FoldMode.prototype)
})

define('ace/mode/ini', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text', 'ace/mode/ini_highlight_rules', 'ace/mode/folding/ini'], function(require, exports, module) {
  'use strict'

  var oop = require('../lib/oop')
  var TextMode = require('./text').Mode
  var IniHighlightRules = require('./ini_highlight_rules').IniHighlightRules
  var FoldMode = require('./folding/ini').FoldMode

  var Mode = function() {
    this.HighlightRules = IniHighlightRules
    this.foldingRules = new FoldMode()
    this.$behaviour = this.$defaultBehaviour
  }
  oop.inherits(Mode, TextMode);

  (function() {
    this.lineCommentStart = ';'
    this.blockComment = null
    this.$id = 'ace/mode/ini'
  }).call(Mode.prototype)

  exports.Mode = Mode
});
(function() {
  window.require(['ace/mode/ini'], function(m) {
    if (typeof module === 'object' && typeof exports === 'object' && module) {
      module.exports = m
    }
  })
})()
